﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WF_Loadout_Editor
{
    public enum WeaponType
    {
        Rifle = 0,
        Shotgun,    // 1
        Pistol,     // 2
        Melee       // 3
    }

    public class Weapon : BaseObject
    {
        private float baseAccuracy;
        public float BaseAccuracy
        {
            get { return baseAccuracy; }
            set { baseAccuracy = value; }
        }

        private float accuracy;
        public float Accuracy
        {
            get { return accuracy; }
            set { accuracy = value; }
        }

        private float baseDamage;
        public float BaseDamage
        {
            get { return baseDamage; }
            set { baseDamage = value; }
        }

        private float damage;
        public float Damage
        {
            get { return damage; }
            set { damage = value; }
        }

        private float baseCriticalChance;
        public float BaseCriticalChance
        {
            get { return baseCriticalChance; }
            set { baseCriticalChance = value; }
        }

        private float criticalChance;
        public float CriticalChance
        {
            get { return criticalChance; }
            set { criticalChance = value; }
        }

        private float baseCriticalDamage;
        public float BaseCriticalDamage
        {
            get { return baseCriticalDamage; }
            set { baseCriticalDamage = value; }
        }

        private float criticalDamage;
        public float CriticalDamage
        {
            get { return criticalDamage; }
            set { criticalDamage = value; }
        }

        private float baseFireRate;
        public float BaseFireRate
        {
            get { return baseFireRate; }
            set { baseFireRate = value; }
        }

        private float fireRate;
        public float FireRate
        {
            get { return fireRate; }
            set { fireRate = value; }
        }

        private float baseReloadSpeed;
        public float BaseReloadSpeed
        {
            get { return baseReloadSpeed; }
            set { baseReloadSpeed = value; }
        }

        private float reloadSpeed;
        public float ReloadSpeed
        {
            get { return reloadSpeed; }
            set { reloadSpeed = value; }
        }

        private int baseMagazineCapacity;
        public int BaseMagazineCapacity
        {
            get { return baseMagazineCapacity; }
            set { baseMagazineCapacity = value; }
        }

        private int magazineCapacity;
        public int MagazineCapacity
        {
            get { return magazineCapacity; }
            set { magazineCapacity = value; }
        }

        private int baseAmmoCapacity;
        public int BaseAmmoCapacity
        {
            get { return baseAmmoCapacity; }
            set { baseAmmoCapacity = value; }
        }

        private int ammoCapacity;
        public int AmmoCapacity
        {
            get { return ammoCapacity; }
            set { ammoCapacity = value; }
        }

        private float baseChargeDamage;
        public float BaseChargeDamage
        {
            get { return baseChargeDamage; }
            set { baseChargeDamage = value; }
        }

        private float chargeDamage;
        public float ChargeDamage
        {
            get { return chargeDamage; }
            set { chargeDamage = value; }
        }

        private float baseChargeSpeed;
        public float BaseChargeSpeed
        {
            get { return baseChargeSpeed; }
            set { baseChargeSpeed = value; }
        }

        private float chargeSpeed;
        public float ChargeSpeed
        {
            get { return chargeSpeed; }
            set { chargeSpeed = value; }
        }

        private float fireDamage;
        public float FireDamage
        {
            get { return fireDamage; }
            set { fireDamage = value; }
        }

        private float freezeDamage;
        public float FreezeDamage
        {
            get { return freezeDamage; }
            set { freezeDamage = value; }
        }

        private float electricDamage;
        public float ElectricDamage
        {
            get { return electricDamage; }
            set { electricDamage = value; }
        }

        private float armorPierceDamage;
        public float ArmorPierceDamage
        {
            get { return armorPierceDamage; }
            set { armorPierceDamage = value; }
        }

        private float puncture;
        public float Puncture
        {
            get { return puncture; }
            set { puncture = value; }
        }

        private float multiShot;
        public float MultiShot
        {
            get { return multiShot; }
            set { multiShot = value; }
        }

        private float stun;
        public float Stun
        {
            get { return stun; }
            set { stun = value; }
        }

        public Weapon()
        {
        }

        public Weapon(string name1, int level1, bool isSuperCharged1, List<Polarity> polarities1, ObjectType type1, float accuracy1, float damage1, float criticalChance1, float criticalDamage1, float fireRate1, float reloadSpeed1, int magazineCapacity1, int ammoCapacity1, float chargeDamage1, float chargeSpeed1, float fireDamage1, float freezeDamage1, float electricDamage1, float armorPierceDamage1, float puncture1, float multiShot1, float stun1)
            : base(name1, level1, isSuperCharged1, polarities1, type1)
        {
            accuracy = baseAccuracy = accuracy1;
            damage = baseDamage = damage1;
            criticalChance = baseCriticalChance = criticalChance1;
            criticalDamage = baseCriticalDamage = criticalDamage1;
            fireRate = baseFireRate = fireRate1;
            reloadSpeed = baseReloadSpeed = reloadSpeed1;
            magazineCapacity = baseMagazineCapacity = magazineCapacity1;
            ammoCapacity = baseAmmoCapacity = ammoCapacity1;
            chargeDamage = baseChargeDamage = chargeDamage1;
            chargeSpeed = baseChargeSpeed = chargeSpeed1;

            fireDamage = fireDamage1;
            freezeDamage = freezeDamage1;
            electricDamage = electricDamage1;
            armorPierceDamage = armorPierceDamage1;
            puncture = puncture1;
            multiShot = multiShot1;
            stun = stun1;
        }
    }
}
